package lambda;

/**
 * 方法引用
 */
public class LambdaDemo3 {
    public static void main(String[] args) {
        Shop shop = new Shop();
        // 创建线程的第一种方法
        Thread t = new Thread(){
            public void run() {
                shop.buy();
            }
        };

        // 创建线程的第二种方法
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                shop.buy();
            }
        });

        // 创建线程的第二种方法改写为lambda表达式

        Thread t3 = new Thread(()->{
            shop.buy();
        });

         /*
            Thread t2 = new Thread(()->shop.buy());
                                   ^-----------^
                                        一样
            类似的:
            (a)->shop.buy(a)     也数以一样

            如果lambda表达式的参数列表与调用的方法参数列表一致，则可以写作下面的样子
            shop::buy
         */
        // 方法引用时，lambda表达式的参数列表和返回值类型必须与引用的方法的参数列表和返回值类型一致
        Thread t4 = new Thread(shop::buy);
        t4.start();


    }
}

class Shop{
    public void buy() {
        System.out.println("购买商品");
    }
}
